// [1128]等价多米诺骨牌对的数量
struct Solution;

//leetcode submit region begin(Prohibit modification and deletion)
impl Solution {
    pub fn num_equiv_domino_pairs(dominoes: Vec<Vec<i32>>) -> i32 {
        let mut ans = 0;
        let mut cnt_map = std::collections::HashMap::new();
        for x in dominoes {
            let (a, b) = if x[0] < x[1] {
                (x[0], x[1])
            } else {
                (x[1], x[0])
            };
            if let Some(&count) = cnt_map.get(&(a, b)) {
                ans += count;
                cnt_map.insert((a, b), count + 1);
            } else {
                cnt_map.insert((a, b), 1);
            }
        }
        ans
    }
}
//leetcode submit region end(Prohibit modification and deletion)

/// 总结：可以拼接成一个数字的形式，当然用元组也没有问题，但用一个数字表示就可以直接用数组

#[test]
fn main() {
    let dominoes = vec![
        vec![1,2],
        vec![2,1],
        vec![3,4],
        vec![5,6],
    ];
    assert_eq!(Solution::num_equiv_domino_pairs(dominoes), 1);
    let dominoes = vec![
        vec![1,2],
        vec![1,2],
        vec![1,1],
        vec![1,2],
        vec![2,2],
    ];
    assert_eq!(Solution::num_equiv_domino_pairs(dominoes), 3);
}